/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * InterfazPrincipal.java
 *
 * Created on 02-abr-2011, 7:45:09
 */

package cliente;

import Protocolo.ConexionCliente;
//import cx.ath.matthew.cgi.TextArea;
import Protocolo.ObservarProtocolo;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author carlosarboleda
 */
public class InterfazPrincipal extends javax.swing.JFrame
implements ObservarProtocolo{


    public static Sistema sistema = new Sistema();

    private InterfazConexion interfazInter;
    private ConexionCliente cc;



    /** Creates new form InterfazPrincipal */
    public InterfazPrincipal() {
        initComponents();
        interfazInter= new InterfazConexion(this);
        deshabilitarMenuDesconectar();
        deshabilitarTxtAreaConversacion();
        deshabilitarTxtAreaMensaje();
        

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelPrincipal = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txtAConversacion = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtAMensajes = new javax.swing.JTextArea();
        botonEnviar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();
        jScrollPane3 = new javax.swing.JScrollPane();
        listaClientes = new javax.swing.JList();
        barraPrincipal = new javax.swing.JMenuBar();
        jMenuChat = new javax.swing.JMenu();
        menuItemConectar = new javax.swing.JMenuItem();
        menuItemDesconectar = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        menuItemSalir = new javax.swing.JMenuItem();
        jMenuAyuda = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        panelPrincipal.setBackground(new java.awt.Color(255, 255, 255));

        txtAConversacion.setColumns(20);
        txtAConversacion.setRows(5);
        jScrollPane1.setViewportView(txtAConversacion);

        txtAMensajes.setColumns(20);
        txtAMensajes.setRows(5);
        txtAMensajes.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtAMensajesKeyPressed(evt);
            }
        });
        jScrollPane2.setViewportView(txtAMensajes);

        botonEnviar.setText("Enviar");
        botonEnviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEnviarActionPerformed(evt);
            }
        });

        botonCancelar.setText("Cancelar");
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        listaClientes.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { " " };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane3.setViewportView(listaClientes);

        org.jdesktop.layout.GroupLayout panelPrincipalLayout = new org.jdesktop.layout.GroupLayout(panelPrincipal);
        panelPrincipal.setLayout(panelPrincipalLayout);
        panelPrincipalLayout.setHorizontalGroup(
            panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .add(panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 97, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                        .add(botonEnviar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(botonCancelar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .add(18, 18, 18)
                .add(panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelPrincipalLayout.setVerticalGroup(
            panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .add(panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane3)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 156, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 9, Short.MAX_VALUE)
                .add(panelPrincipalLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, panelPrincipalLayout.createSequentialGroup()
                        .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, panelPrincipalLayout.createSequentialGroup()
                        .add(botonEnviar)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(botonCancelar)
                        .add(26, 26, 26))))
        );

        jMenuChat.setText("Chat");

        menuItemConectar.setText("Conectar");
        menuItemConectar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemConectarActionPerformed(evt);
            }
        });
        jMenuChat.add(menuItemConectar);

        menuItemDesconectar.setText("Desconectar");
        menuItemDesconectar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemDesconectarActionPerformed(evt);
            }
        });
        jMenuChat.add(menuItemDesconectar);
        jMenuChat.add(jSeparator1);

        menuItemSalir.setText("Salir");
        menuItemSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemSalirActionPerformed(evt);
            }
        });
        jMenuChat.add(menuItemSalir);

        barraPrincipal.add(jMenuChat);

        jMenuAyuda.setText("Ayuda");
        barraPrincipal.add(jMenuAyuda);

        setJMenuBar(barraPrincipal);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelPrincipal, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelPrincipal, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
    //Activa la interfazConexion para introducir los datos para conectarse a la sala de chat
    private void menuItemConectarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemConectarActionPerformed

        // TODO add your handling code here:

         interfazInter.setVisible(true);
    }//GEN-LAST:event_menuItemConectarActionPerformed
    // envia el mensaje al presionar la tecla "ENTER"
    private void txtAMensajesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtAMensajesKeyPressed
        // TODO add your handling code here:

         if(evt.getKeyCode()==KeyEvent.VK_ENTER){
        enviarMensaje(getMensaje());
        limpiarTextAreaMensajes();

    }


    }//GEN-LAST:event_txtAMensajesKeyPressed
    //se sale de la sala de chat
    private void menuItemDesconectarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemDesconectarActionPerformed
        try {
            // TODO add your handling code here:
            cc.desconectar();
            habilitarMenuConectar();
            deshabilitarMenuDesconectar();
        } catch (Exception ex) {
            Logger.getLogger(InterfazPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
      

    }//GEN-LAST:event_menuItemDesconectarActionPerformed
    //envia el mensaje y limpia el area de mesajes
    private void botonEnviarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEnviarActionPerformed
        // TODO add your handling code here:

        enviarMensaje(getMensaje());
        limpiarTextAreaMensajes();
    }//GEN-LAST:event_botonEnviarActionPerformed

    //borra lo escrito en el area de mensaje
    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        // TODO add your handling code here:
        limpiarTextAreaMensajes();

    }//GEN-LAST:event_botonCancelarActionPerformed

    // menuItemSalir se activa y sale de la aplicacion
    private void menuItemSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemSalirActionPerformed
        // TODO add your handling code here:
        cc.desconectar();
        System.exit(0);

    }//GEN-LAST:event_menuItemSalirActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new InterfazPrincipal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuBar barraPrincipal;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonEnviar;
    private javax.swing.JMenu jMenuAyuda;
    private javax.swing.JMenu jMenuChat;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    public static javax.swing.JList listaClientes;
    private javax.swing.JMenuItem menuItemConectar;
    private javax.swing.JMenuItem menuItemDesconectar;
    private javax.swing.JMenuItem menuItemSalir;
    private javax.swing.JPanel panelPrincipal;
    private javax.swing.JTextArea txtAConversacion;
    private javax.swing.JTextArea txtAMensajes;
    // End of variables declaration//GEN-END:variables


    //Inicia el (cliente) hilo de conexion cliente
    public void inicializarCliente(){

    cc.start();

    }

    // Inicializa cliente desde a Interfaz Principal pero se usa el metodo en la Interfaz de Conexion
    public void conectarCliente1(String direccionIp, int puerto, String nombreUsuario){
        cc= new ConexionCliente(direccionIp, puerto, nombreUsuario);
        cc.agregarObservador(this);
    }

    // deshabilita el menuItem conectar para que no vuelvan a introducir los datos, una vez conectado
    public void deshabilitarMenuConectar(){

        menuItemConectar.setEnabled(false);

    }
    // habilita el menuItem conectar para que vuelvan a introducir los datos, una vez desconectado
    public void habilitarMenuConectar(){

        menuItemConectar.setEnabled(true);

    }

    // deshabilita el menuItem desconectar para que no se desconecte por que solo quire conectarse
     public void deshabilitarMenuDesconectar(){

        menuItemDesconectar.setEnabled(false);

    }
    // habilita el menuItem desconectar para cuando quiera dejar la sala de chat
    // Y una vez conectado se pone el el titulo de Frame el nombre del usuario.
     public void habilitarMenuDesconectar(){

        menuItemDesconectar.setEnabled(true);
    setTitle( "Chat: " + interfazInter.getNombreUsuario() );


    }
    // Envia un mensaje por el caht
      public void enviarMensaje(String mensaje){

          cc.enviarMensaje(mensaje);

      }

    // Captura lo que se ha escrito en el txtAMensaje
      public String getMensaje(){
          return(txtAMensajes.getText());
      }

    // una vez se envia se limpia el txtAreaMensajes
      public void limpiarTextAreaMensajes(){
          txtAMensajes.setText("");

      }

      public void recibirMensaje(String usuario, String mensaje){

          // Procesar usuario y mensaje
          txtAConversacion.append(usuario+": "+ mensaje +"\n");

      }

      public void deshabilitarTxtAreaMensaje(){
          txtAMensajes.setEnabled(false);
      }

      public void deshabilitarTxtAreaConversacion(){
          txtAConversacion.setEnabled(false);
      }

      public void habilitarTxtAreaMensaje(){
          txtAMensajes.setEnabled(true);
      }

      public void habilitarTxtAreaConversacion(){
          txtAMensajes.setEnabled(true);
      }
}
